package pe.edu.upc.xcode.food.rest;

import java.net.URISyntaxException;
import java.util.Date;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

import org.springframework.beans.factory.annotation.Autowired;

import com.google.gson.Gson;

import pe.edu.upc.xcode.food.domain.Categoriaplato;
import pe.edu.upc.xcode.food.domain.Plato;
import pe.edu.upc.xcode.food.domain.Restaurant;
import pe.edu.upc.xcode.food.service.PlatoService;

@Path("/platos")
/* Identifica al servio Web */
//@Produces("text/plain")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
@Produces({ MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
public class PlatoWS {

	@Autowired
	private PlatoService platoService;
	
	Gson gson = new Gson();
	
	@GET
	@Path("/save/{txtRestaurant}/{txtNombrePlato}/{txtCategoria}/{txaDescripcion}/{txtFecPubli}")
	public Response save(
			@PathParam("txtRestaurant") Integer codigoRestaurant,
			@PathParam("txtNombrePlato") String nombrePlato,
			@PathParam("txtCategoria") Integer categoriaPlato,
			@PathParam("txaDescripcion") String descripcionPlato,			
			@PathParam("txtFecPubli") String fechaPublicacion) throws URISyntaxException {
		System.out.println("----"+codigoRestaurant+"----"+nombrePlato+"----"+categoriaPlato+"----"+descripcionPlato+"----"+fechaPublicacion+"----");
		
		
		Restaurant r= new Restaurant();
		r.setCodigo(codigoRestaurant);
		Categoriaplato cp = new Categoriaplato();
		cp.setCodigo(categoriaPlato);
		
		platoService.save(
				new Plato(r,cp,nombrePlato, descripcionPlato, new Date() , new Date(), "A")); 
		
		
		return Response.ok().build();
		//return "ingresar.htm";
	}
	
	@POST
	public Response save(String json) {
		try {
			System.out.println("saveeeee"+json);
			platoService.save(gson.fromJson(json, Plato.class));
		} catch (Exception e) {
			System.out.println(e);
			return Response.status(Status.INTERNAL_SERVER_ERROR)
					.entity("Error al guardar el Plato").build();
		}
		return Response.ok().build();
	}

	@GET
	@Path("/update")
	public Response update(
			@PathParam("txtRestaurant") Integer codigoRestaurant,
			@PathParam("txtNombrePlato") String nombrePlato,
			@PathParam("txtCategoria") Integer categoriaPlato,
			@PathParam("txaDescripcion") String descripcionPlato,			
			@PathParam("txtFecPubli") String fechaPublicacion) throws URISyntaxException {

		
		Restaurant r= new Restaurant();
		r.setCodigo(codigoRestaurant);
		Categoriaplato cp = new Categoriaplato();
		cp.setCodigo(categoriaPlato);
		
		platoService.update(
				new Plato(r,cp,nombrePlato, descripcionPlato, new Date() , new Date(), "A")); 
		
		
		return Response.ok().build();
		
	}

	@GET
	@Path("/{codigoPlato}")
	public Response find(@PathParam("codigoPlato") Integer codigoPlato){
			Plato p=platoService.find(new Plato(codigoPlato));
			System.out.println("codigo "+p.getCodigo());
			System.out.println("codigo "+p.getNombrePlato());
			
		return Response.ok(gson.toJson( p )).build();
	}
	
	@GET
	@Path("/delete/{codigoPlato}")
	public Response delete(
			@PathParam("codigoCategoria") Integer codigoPlato) {
		return Response.ok(gson.toJson(platoService.findAll())).build();
	}

	@GET
	@Path("/")
	public Response listar() {
		//return platoService.findAll();
		return Response.ok(gson.toJson(platoService.findAll())).build();
	}
	

}
